/**
 * 
 */
package com.yullage.ann.network.som;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Yu-chun Huang
 * 
 */
public class SomParameters {
	public enum SelectionType {
		MAXIMAL, RANDOM;
	}

	List<Integer> networkStructure = new ArrayList<Integer>();

	int maxEpochsPerLayer = 5000;

	SelectionType selectionType = SomParameters.SelectionType.MAXIMAL;

	double attractionForce = 0.01;
	double repulsionForce = 0.1;

	String trainingDataFileName = "";
	String trainingSimilarityFileName = "";

	/**
	 * @return the networkStructure
	 */
	public List<Integer> getNetworkStructure() {
		return networkStructure;
	}

	/**
	 * @param networkStructure
	 *            the networkStructure to set
	 */
	public void setNetworkStructure(List<Integer> networkStructure) {
		this.networkStructure = networkStructure;
	}

	/**
	 * @return the maxEpochsPerLayer
	 */
	public int getMaxEpochsPerLayer() {
		return maxEpochsPerLayer;
	}

	/**
	 * @param maxEpochsPerLayer
	 *            the maxEpochsPerLayer to set
	 */
	public void setMaxEpochsPerLayer(int maxEpochsPerLayer) {
		this.maxEpochsPerLayer = maxEpochsPerLayer;
	}

	/**
	 * @return the selectionType
	 */
	public SelectionType getSelectionType() {
		return selectionType;
	}

	/**
	 * @param selectionType
	 *            the selectionType to set
	 */
	public void setSelectionType(SelectionType selectionType) {
		this.selectionType = selectionType;
	}

	/**
	 * @return the attractionForce
	 */
	public double getAttractionForce() {
		return attractionForce;
	}

	/**
	 * @param attractionForce
	 *            the attractionForce to set
	 */
	public void setAttractionForce(double attractionForce) {
		this.attractionForce = attractionForce;
	}

	/**
	 * @return the repulsionForce
	 */
	public double getRepulsionForce() {
		return repulsionForce;
	}

	/**
	 * @param repulsionForce
	 *            the repulsionForce to set
	 */
	public void setRepulsionForce(double repulsionForce) {
		this.repulsionForce = repulsionForce;
	}

	/**
	 * @return the trainingDataFileName
	 */
	public String getTrainingDataFileName() {
		return trainingDataFileName;
	}

	/**
	 * @param trainingDataFileName
	 *            the trainingDataFileName to set
	 */
	public void setTrainingDataFileName(String trainingDataFileName) {
		this.trainingDataFileName = trainingDataFileName;
	}

	/**
	 * @return the trainingSimilarityFileName
	 */
	public String getTrainingSimilarityFileName() {
		return trainingSimilarityFileName;
	}

	/**
	 * @param trainingSimilarityFileName
	 *            the trainingSimilarityFileName to set
	 */
	public void setTrainingSimilarityFileName(String trainingSimilarityFileName) {
		this.trainingSimilarityFileName = trainingSimilarityFileName;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "SomParameters [networkStructure=" + networkStructure + ", maxEpochsPerLayer=" + maxEpochsPerLayer
				+ ", selectionType=" + selectionType + ", attractionForce=" + attractionForce + ", repulsionForce="
				+ repulsionForce + ", trainingDataFileName=" + trainingDataFileName + ", trainingSimilarityFileName="
				+ trainingSimilarityFileName + "]";
	}

}
